<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 1. 创建一个根标签(将动态创建的元素,插入到这个标签中,从而使动态创建的元素可以在页面中渲染出来) -->
    <div id="root"></div>
    <!-- 2. 引入react和react-dom
    注意: 要先引入react,后引入react-dom.
    react.js提供了React对象.
    react-dom.js提供了ReactDOM
    -->
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>

    <!-- 3. 在script标签中,写js,动态创建元素 -->
    <!-- 注意: 需要babel编译我们代码中的jsx,就要在script上写type="text/babel". 这样babel才会工作 -->
    <script type="text/babel">
      const div = (
        <div>
          {/*
            注册事件: 要给哪个标签注册事件,就在标签上写on+事件名={函数}
            注意点: 1. 事件名和DOM中学的事件名一致 2. 事件名首字母要大写(要写成小驼峰的形式)
          */}
          <button
            onClick={function (e) {
              // e.persist() // 打印合成事件,可以直接看到属性的值
              // 这个e严格来说,不是事件对象,是合成事件
              // 合成事件,其实就是对于事件对象的包装. 为了解决事件对象上属性的兼容性问题
              // 虽然是合成事件,但是使用和事件对象是一样的
              // console.log('按钮被点击了', e)

              // console.log(this) //
            }}
            // onMouseEnter={function () {
            //   console.log('鼠标进入按钮了')
            // }}
          >
            按钮
          </button>
        </div>
      )

      ReactDOM.render(div, document.getElementById('root'))

      // 伪代码:
      // reactDOM根据我们写的jsx, 创建出来button按钮真实dom,然后注册点击事件
      // btn.addEventListener(
      //   'click',
      //   function (真正的事件对象) {
      //     // 就可以包裹真正的事件对象,创建一个合成事件
      //     // 假设我们在jsx里面注册事件,函数是fn
      //     fn.apply(undefined, [合成事件])
      //   },
      //   false
      // )
    </script>
  </body>
</html>
